/*!
 * Crypto-JS v1.1.0
 * http://code.google.com/p/crypto-js/
 * Copyright (c) 2009, Jeff Mott. All rights reserved.
 * http://code.google.com/p/crypto-js/wiki/License
 */
const Crypto = require('./crypto.js');

(function() {
  // Shortcut
  var util = Crypto.util // Public API

  var SHA1 = (Crypto.SHA1 = function(message, options) {
    var digestbytes = util.wordsToBytes(SHA1._sha1(message))
    return options && options.asBytes ? digestbytes : options && options.asString ? util.bytesToString(digestbytes) : util.bytesToHex(digestbytes)
  }) // The core

  SHA1._sha1 = function(message) {
    var m = util.stringToWords(message)
    var l = message.length * 8
    var w = []
    var H0 = 1732584193
    var H1 = -271733879
    var H2 = -1732584194
    var H3 = 271733878
    var H4 = -1009589776 // Padding
    m[l >> 5] |= 128 << (24 - (l % 32))
    m[(((l + 64) >>> 9) << 4) + 15] = l

    for (var i = 0; i < m.length; i += 16) {
      var a = H0
      var b = H1
      var c = H2
      var d = H3
      var e = H4
      for (var j = 0; j < 80; j++) {
        if (j < 16) {
          w[j] = m[i + j]
        } else {
          var n = w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16]
          w[j] = (n << 1) | (n >>> 31)
        }

        var t =
                    ((H0 << 5) | (H0 >>> 27)) +
                    H4 +
                    (w[j] >>> 0) +
                    (j < 20
                      ? ((H1 & H2) | (~H1 & H3)) + 1518500249
                      : j < 40
                        ? (H1 ^ H2 ^ H3) + 1859775393
                        : j < 60
                          ? ((H1 & H2) | (H1 & H3) | (H2 & H3)) - 1894007588
                          : (H1 ^ H2 ^ H3) - 899497514)
        H4 = H3
        H3 = H2
        H2 = (H1 << 30) | (H1 >>> 2)
        H1 = H0
        H0 = t
      }

      H0 += a
      H1 += b
      H2 += c
      H3 += d
      H4 += e
    }

    return [H0, H1, H2, H3, H4]
  } // Package private blocksize

  SHA1._blocksize = 16
})()

module.exports = Crypto
